unit uMircros;

{$mode objfpc}{$H+}
{
Microcontroller	ATmega1280
Operating Voltage	5V
Input Voltage (recommended)	7-12V
Input Voltage (limits)	6-20V
Digital I/O Pins	54 (of which 14 provide PWM output)
Analog Input Pins	16
DC Current per I/O Pin	40 mA
DC Current for 3.3V Pin	50 mA
Flash Memory	128 KB of which 4 KB used by bootloader
SRAM	8 KB
EEPROM	4 KB
Clock Speed	16 MHz
}
interface

uses
  Classes, SysUtils,IniFiles;
//Objeto micro

Type

{ TMicro }

TMicro =  Class(TObject)


  Nombre : String;
  DigitalIO : Byte;
  PWDSignal : Byte;
  AnaglogI  : Byte;
  Private
     Vacia : char;
     Entrada : char;
     Salida : char;
    ListaSenalesDigitales : Array of Char;
    ListaSenalesAnalogicas : Array of Boolean;
    Procedure ResetDigitales;
    Procedure ResetAnalogicas;
    Procedure Cargar (aFile:String);
  Public
    Constructor Create;
    Constructor Create (aNombre : String;Digital : Byte; PWD : Byte; Analog : Byte);Overload;
    Constructor Create (aNombre : String;aFile:String);Overload;
    Procedure SalvarComo (aFile : String);

end;

implementation

{ TMicro }

 procedure TMicro .ResetDigitales ;
 var
   I : Integer ;
 begin
  For I := 0 To length(ListaSenalesDigitales)-1 do
  Begin
   ListaSenalesDigitales[i] := Vacia;
  end;

 end;

 procedure TMicro .ResetAnalogicas ;
 var
   I : Integer ;
 begin
  For I:= 0 To Length(ListaSenalesAnalogicas)-1 do
  Begin
   ListaSenalesAnalogicas[i] := False;;
  end;
 end;

constructor TMicro.Create;
begin
  Nombre := 'Sin nombre';
  DigitalIo := 0;
  PWDSignal := 0;
  AnaglogI := 0;
  SetLength (ListaSenalesDigitales,0);
  SetLength (ListaSenalesAnalogicas,0);
  Vacia := 'v';
  Entrada := 'e';
  Salida := 's';
end;

constructor TMicro.Create(aNombre: String; Digital: Byte; PWD: Byte;
  Analog: Byte);
begin
 Create;
 Nombre := aNombre;
 DigitalIO := Digital;
 PWDSignal := PWD;
 AnaglogI := Analog;
 SetLength (ListaSenalesDigitales,DigitalIO);
 SetLength (ListaSenalesAnalogicas,AnaglogI);
 ResetDigitales;
 ResetAnalogicas;
end;

constructor TMicro.Create (aNombre : String ; aFile : String );
begin
  Create;
  Nombre := aNombre;
  Cargar (aFile);
end;

procedure TMicro.SalvarComo(aFile: String);
Var
   Fichero : TIniFile;
begin
   //Ini
 Fichero := TiniFile.Create(aFile);
 With Fichero do
 Begin
  WriteInteger (Nombre,'Digital',DigitalIO);
  WriteInteger (Nombre,'PWD',PWDSignal);
  WriteInteger (Nombre,'Analogica',AnaglogI);
  Free;
 end;
end;

procedure TMicro.Cargar(aFile: String);
Var
   Fichero : TIniFile;
begin
  Fichero := TIniFile.Create(aFile);
  With Fichero do
  Begin
   ReadInteger (Nombre,'Digital',0);
   ReadInteger (Nombre,'PWD',0);
   WriteInteger(Nombre,'Analogica',AnaglogI);
   Free;
  end;
end;

end.

